package com.ozo.boot.gen.util.sql;

import java.util.ArrayList;
import java.util.List;

public class SqlServerCreateTableUtil {

    /**
     * 拼接建表语句
     *
     * @param tableName 表名
     * @param columns   字段列表，每个字段由字段名、字段类型和是否允许为空组成
     * @return 拼接好的建表SQL语句
     */
    public static String createTableStatement(String tableName, List<Column> columns) {
        StringBuilder sb = new StringBuilder();
        sb.append("CREATE TABLE ").append(tableName).append(" (\n");

        for (Column column : columns) {
            sb.append("    ").append(column.getName()).append(" ").append(column.getType());
            if (!column.isNullable()) {
                sb.append(" NOT NULL");
            }
            sb.append(",\n");
        }

        // 如果字段列表不为空，移除最后一个逗号和换行符
        if (!columns.isEmpty()) {
            sb.setLength(sb.length() - 2);
        }

        // 在这里可以添加其他表选项，如主键、外键、索引等
        // 例如：sb.append(",\n    PRIMARY KEY (ID)");

        sb.append("\n);");
        return sb.toString();
    }

    /**
     * 表示一个数据库表的字段
     */
    public static class Column {
        private String name;
        private String type;
        private boolean nullable;

        public Column(String name, String type, boolean nullable) {
            this.name = name;
            this.type = type;
            this.nullable = nullable;
        }

        public String getName() {
            return name;
        }

        public String getType() {
            return type;
        }

        public boolean isNullable() {
            return nullable;
        }
    }

    /**
     * 示例方法，展示如何使用createTableStatement方法
     */
    public static void main(String[] args) {
        List<Column> columns = new ArrayList<>();
        columns.add(new Column("ID", "INT", false));
        columns.add(new Column("Name", "NVARCHAR(50)", true));
        columns.add(new Column("Age", "INT", true));

        String sql = createTableStatement("Employees", columns);
        System.out.println(sql);
    }
}